
#include "user_flash.h"  
#include "ota_api.h"
#include <string.h>



static ota_api_obj_st  ota_api_obj;


/**
 *  @brief 查询用于升级的文件系统或flash空间大小
 *  
 *  @return 
 *   >= 0 - 空间大小 \n
 *   <  0 - 失败
 *  
 */
int32_t cm_ota_get_capacity(void)
{
    return  Flash_GetAppSize( );
}

/**
 *  @brief 通用OTA升级初始化
 *  
 *  @return 
 *   =  0 - 成功 \n
 *   <  0 - 失败
 *  
 */
int32_t cm_ota_init(void)
{
   memset( &ota_api_obj,0,sizeof(ota_api_obj_st) );

    return 0;   
}

/**
 *  @brief 通用OTA升级，保存升级包至文件系统或flash
 *  
 *  @param [in] buffer  下载固件包数据
 *  @param [in] size   	下载固件包长度
 *  @return 
 *   =  0 - 成功 \n
 *   <  0 - 失败
 *  
 *  @details 1.本接口将OTA升级包写入文件系统
 *           2.调用该接口写入之前需要调用接口cm_ota_set_otasize
 *             配置ota升级包总大小
 */
int32_t cm_ota_firmware_write(const char *buffer, uint32_t size)
{
    ota_api_obj.fw_size_cnt += size;
    return 0;       
}

/**
 *  @brief 查询已写入文件系统或flash中的升级包大小
 *  
 *  @return 
 *   >= 0 - 已写入文件系统或flash中的升级包大小 \n
 *   <  0 - 失败
 *  
 */
int32_t cm_ota_get_written_size(void)
{
   return ota_api_obj.fw_size_cnt ;

}

/**
 *  @brief 擦除已写入文件系统或flash中的升级包
 *  
 *  @return 
 *   =  0 - 成功 \n
 *   <  0 - 失败
 *  
 */
int32_t cm_ota_firmware_erase(void)
{

//.....
    return 0;  

}

/**
 *  @brief 触发升级
 *  
 *  @return 
 *   =  0 - 成功 \n
 *   <  0 - 失败
 *  
 *  @details 须在写入升级包操作后执行
 */
int32_t cm_ota_upgrade(void)
{

    ota_api_obj.execute = 1;
    return 0;   

}

/**
 *  @brief 用于设置升级包总大小
 *  
 *  @return void
 *  
 *  @details 调用cm_ota_firmware_write写之前需要调用该接口
 *           配置ota升级包总大小
 */
void cm_ota_set_otasize(int size)
{

    ota_api_obj.firmware_size = size;

}


